import java.util.ArrayList;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.JList;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;

public class JanelaPrincipal extends JPanel {

	public static JList lista;
	public static DefaultListModel model;
	public static File uploadFile = null;
	public static File downloadFile = null;
	public static JTextField textField;

	public JanelaPrincipal() {
		setBorder(new EmptyBorder(5, 5, 5, 5));
		setLayout(null);

		setSize(450, 300);

		JLabel upload = new JLabel("Upload");
		upload.setBounds(10, 11, 46, 14);
		add(upload);

		JSeparator separador = new JSeparator();
		separador.setBounds(0, 120, 440, -36);

		add(separador);
		separador.setVisible(true);
		JLabel dowload = new JLabel("Donwload");
		dowload.setBounds(10, 109, 62, 14);
		add(dowload);

		JButton btnBrowser = new JButton("Browse");
		btnBrowser.addActionListener(new ActionListener() {
			// obter o ficheiro pelo file chooser
			public void actionPerformed(ActionEvent arg0) {
				final JFileChooser fc = new JFileChooser();
				fc.setCurrentDirectory(new java.io.File("."));
				fc.setDialogTitle("Ficheiro a enviar");
				fc.showOpenDialog(new JFrame());
				File selFile = fc.getSelectedFile();
				if (!selFile.isFile())
					return;
				uploadFile = selFile;
				textField.setText(uploadFile.getAbsolutePath());
			}
		});
		btnBrowser.setBounds(21, 61, 89, 23);
		add(btnBrowser);

		textField = new JTextField("");
		textField.setBounds(120, 62, 201, 20);
		add(textField);
		textField.setColumns(10);
		textField.enable(false);

		JButton btnUpload = new JButton("Upload");
		btnUpload.addActionListener(new ActionListener() {
			// verificar se existe um ficheiro seleccionado antes de fazer
			// upload
			public void actionPerformed(ActionEvent e) {
				if (uploadFile == null) {
					JOptionPane.showMessageDialog(null,
							"Precisa seleccionar um ficheiro primeiro!");
					return;
				}
				InterfaceGrafica.getCliente().uploadPedido(uploadFile);
			}
		});
		btnUpload.setBounds(331, 61, 89, 23);
		add(btnUpload);
		model = new DefaultListModel();

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(41, 134, 191, 127);
		add(scrollPane);
		lista = new JList(model);
		scrollPane.setViewportView(lista);
		// obter a directoria pelo file chooser
		JButton btnBrowser_1 = new JButton("Browse");
		btnBrowser_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser fc = new JFileChooser();
				fc.setCurrentDirectory(new java.io.File("."));
				fc.setDialogTitle("Pasta a guardar");
				fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
				fc.setAcceptAllFileFilterUsed(false);
				if (fc.showOpenDialog(new JFrame()) == JFileChooser.APPROVE_OPTION) {
					downloadFile = fc.getSelectedFile();
				}
			}
		});
		btnBrowser_1.setBounds(290, 144, 101, 23);
		add(btnBrowser_1);

		JButton btnDownload = new JButton("Download");
		btnDownload.addActionListener(new ActionListener() {
			// verificar se existe algo selecionado na list antes de fazer
			// download
			public void actionPerformed(ActionEvent e) {
				if (lista.getSelectedValue() == null || downloadFile == null) {
					JOptionPane
							.showMessageDialog(null,
									"Precisa seleccionar um ficheiro e directoria primeiro!");
					return;
				} else {
					InterfaceGrafica.getCliente().downloadPedido(
							(lista.getSelectedIndex()));

				}
			}
		});
		btnDownload.setBounds(290, 178, 101, 23);
		add(btnDownload);

		JButton btnEliminar = new JButton("Eliminar");
		btnEliminar.addActionListener(new ActionListener() {
			// verificar se existe algo selecionado na list antes de eliminar
			public void actionPerformed(ActionEvent e) {
				if (lista.getSelectedValue() == null) {
					JOptionPane.showMessageDialog(null,
							"Precisa seleccionar um ficheiro primeiro!");
					return;
				} else
					InterfaceGrafica.getCliente().eliminarPedido(
							((int) lista.getSelectedIndex()));

			}
		});
		btnEliminar.setBounds(290, 212, 101, 23);
		add(btnEliminar);

	}

	// enviar para o ecra a nova lista de ficheiros recebida do servidor
	public static void setLista(ArrayList<Ficheiro> ficheiros) {
		model.clear();
		for (int i = 0; i < ficheiros.size(); i++) {
			Ficheiro f = ficheiros.get(i);
			model.addElement(new String(f.getNome() + " "
					+ (f.getTamanho() / 1024) + "kb " + f.getNmrCopias() + " "
					+ f.getDataCriacao() + " " + f.getDataModificacao()));
		}

	}
}